﻿using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    public class NegocioTipoFormaPagamento
    {
        private IRepositorioTipoFormaPagamento _repositorioTipoFormaPagamento;

        public NegocioTipoFormaPagamento()
        {
            _repositorioTipoFormaPagamento = new RepositorioTipoFormaPagamento();
        }

        public TipoFormaPagamento Inserir(TipoFormaPagamento tipoFormaPagamento, Usuario usuarioPermissao)
        {
            tipoFormaPagamento.Codigo = GeradorCodigo.GerarCodigo(1);
            tipoFormaPagamento.Codigo += (_repositorioTipoFormaPagamento.ObterUltimoIdCodigoInteiro() + 1).ToString();
            tipoFormaPagamento.Codigo += GeradorCodigo.GerarCodigo(1, tipoFormaPagamento.Codigo);
            return _repositorioTipoFormaPagamento.Inserir(tipoFormaPagamento);
        }

        public TipoFormaPagamento Atualizar(TipoFormaPagamento tipoFormaPagamento, Usuario usuarioPermissao)
        {
            return _repositorioTipoFormaPagamento.Atualizar(tipoFormaPagamento);
        }

        public void Excluir(TipoFormaPagamento tipoFormaPagamento, Usuario usuarioPermissao)
        {
            TipoFormaPagamento tipoFormaPagamentoTmp = ObterPorId(tipoFormaPagamento.TipoFormaPagamentoId);
            _repositorioTipoFormaPagamento.Excluir(tipoFormaPagamentoTmp);
        }

        public IList<TipoFormaPagamento> ObterTodos()
        {
            return _repositorioTipoFormaPagamento.ObterTodos();
        }

        public List<TipoFormaPagamento> ObterTodos(int inicio, int quantidade, int quantidadeMinima, 
            string codigo, 
            string descricao, 
            Usuario usuarioPermissao,
            EnumTipoFormaPagamento enumTipoFormaPagamento)
        {
            return _repositorioTipoFormaPagamento.ObterTodos(inicio, quantidade, quantidadeMinima, codigo, descricao, enumTipoFormaPagamento);
        }

        public TipoFormaPagamento ObterPorId(int id)
        {
            return _repositorioTipoFormaPagamento.ObterPorId(id);
        }

        public TipoFormaPagamento ObterPorCodigo(string codigo, Usuario usuarioPermissao)
        {
            return _repositorioTipoFormaPagamento.ObterPorCodigo(codigo);
        }
    }
}